package cn.pkubangbang.demo.democontact.mapper;

import cn.pkubangbang.demo.democontact.entity.Blog;
import cn.pkubangbang.demo.democontact.entity.Person;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

/**
 * @Author: zhangzhenbang@k2data.com.cn
 * @Date: 2018-09-06 14:51
 */
@Mapper
@Repository
public interface BlogMapper {

    /**
     * 获取某人的所有Blog
     * @param p person
     * @return blog列表（按创建时间排序）
     */
    List<Blog> getBlogsOfPerson(Person p);

    /**
     * 分页获取某人的blog。注意：序号是从0开始的，start包含在内。
     * @param p person
     * @param start 开始序号（inclusive）
     * @param limit 读取的条数
     * @return blog列表（按创建时间排序）
     */
    List<Blog> getBlogsOfPersonPaged(Person p, Long start, Long limit);

    /**
     * 分段获取某人的blog。注意：序号是从0开始的，start包含在内，end不包含在内。
     * @param p person
     * @param startIndexInclusive 开始序号（inclusive）
     * @param endIndexExclusive 结束序号（exclusive）
     * @return blog列表（按创建时间排序）
     */
    List<Blog> getBlogsOfPersonRanged(Person p, Long startIndexInclusive, Long endIndexExclusive);

    /**
     * 获取一群人的blog。
     * @param people person列表
     * @return blog列表（按创建时间排序）
     */
    List<Blog> getBlogsOfPeople(List<Person> people);

    /**
     * 分页获取一群人的blog。注意：序号是从0开始的，start包含在内。
     * @param people person列表
     * @param start 开始条数（inclusive）
     * @param limit 读取的条数
     * @return blog列表
     */
    List<Blog> getBlogsOfPeoplePaged(List<Person> people, Long start, Long limit);

    /**
     * 分段获取一群人的blog。注意：序号是从0开始的，start包含在内，end不包含在内。
     * @param people person列表
     * @param startIndexInclusive 开始序号（inclusive）
     * @param endIndexExclusive 结束序号（exclusive）
     * @return blog列表
     */
    List<Blog> getBlogsOfPeopleRanged(List<Person> people, Long startIndexInclusive, Long endIndexExclusive);

    /**
     * 插入blog
     * @param blog blog, 带有createTime
     * @return 1 if successfully inserted.
     * todo how to return complicated object??
     */
    Long insertBlog(Blog blog);

}
